<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="./js/vue.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="app">
        <p ref="pdom">msg:{{msg}}</p>
        <input type="text" v-model="msg">
        <input type="button" value="打印pdom的innerHTML" @click="printInnerHtml()">
        <hr>
        <p>user:{{user}}</p>
        <input type="button" value="为user添加age" @click="addAge()">
        <br>
        <input type="button" value="删除msg监控" @click="deleteAge()">
    </div>
    <hr>
    <input type="button" value="销毁实例" onclick="destroyVue()">
</body>
<script>
    var vm = new Vue({
        data:{
            msg:"测试数据",
            user:{
                name:"Tom"
            }
        },
        methods:{
            printInnerHtml(){
                this.msg = "新数据变量";// 当 vue 发生变量变化后，需要更新DOM的操作为异步操作
                console.log(this.$refs.pdom.innerHTML);
                // setTimeout(()=>{
                //     console.log(this.$refs.pdom.innerHTML);
                // },200)
                this.$nextTick(()=>{
                    console.log(this.$refs.pdom.innerHTML);
                })
            },
            addAge(){
                // this.user.age = 23;
                // $set vue封装后对外公开的 defineProperty 方法
                // $set 主要完成对新增属性进行定义操作
                // this.$set(被操作的对象，需要添加的属性，属性的值)
                if(this.user.age === undefined){
                    // this.$set(this.user,"age",23)
                    Vue.set(this.user,"age",23);
                    // $set 的被操作对象只能是 数据仓库 data中的一个已知属性
                    // this.$set(this.$data,"age",23);
                }else{
                    this.user.age = 33;
                }
            },
            deleteAge(){
                // $delete 删除指定元素的监控
                // this.$delete(被操作的对象，需要删除的属性)
                this.$delete(this.user,"age");
            }
        }
    })
    vm.$mount("#app");


    // $delete 销毁容器和实例直接的关联关系
    function destroyVue(){
        console.log(vm.$el.__vue__);
        vm.$destroy();
        console.log(vm.$el.__vue__);
    }
</script>
</html>